﻿' ******************************************************************************
' ** 
' **  Yahoo Finance Managed
' **  Written by Marius Häusler 2010
' **  It would be pleasant, if you contact me when you are using this code.
' **  Contact: YahooFinanceManaged@gmail.com
' **  Project Home: http://code.google.com/p/yahoo-finance-managed/
' **  
' ******************************************************************************
' **  
' **  Copyright 2010 Marius Häusler
' **  
' **  Licensed under the Apache License, Version 2.0 (the "License");
' **  you may not use this file except in compliance with the License.
' **  You may obtain a copy of the License at
' **  
' **    http://www.apache.org/licenses/LICENSE-2.0
' **  
' **  Unless required by applicable law or agreed to in writing, software
' **  distributed under the License is distributed on an "AS IS" BASIS,
' **  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
' **  See the License for the specific language governing permissions and
' **  limitations under the License.
' ** 
' ******************************************************************************


Namespace Finance

    ''' <summary>
    ''' CompanyStatisticsData is a conatiner class for several statistics of a single company.
    ''' </summary>
    ''' <remarks></remarks>
    Public Class CompanyStatisticsData
        Implements IID

        Private mID, mName, mData As String
        Private mValuationMeasures As CompanyValuationMeasures = Nothing
        Private mFinancialHighlights As CompanyFinancialHighlights = Nothing
        Private mTradingInfo As CompanyTradingInfo = Nothing

        ''' <summary>
        ''' The ID of the company.
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public ReadOnly Property ID() As String Implements IID.ID
            Get
                Return mID
            End Get
        End Property
        ''' <summary>
        ''' The name of the company
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public ReadOnly Property Name() As String
            Get
                Return mName
            End Get
        End Property
        Friend ReadOnly Property Data() As String
            Get
                Return mData
            End Get
        End Property

        Public ReadOnly Property ValuationMeasures() As CompanyValuationMeasures
            Get
                Return mValuationMeasures
            End Get
        End Property
        Public ReadOnly Property FinancialHighlights() As CompanyFinancialHighlights
            Get
                Return mFinancialHighlights
            End Get
        End Property
        Public ReadOnly Property TradingInfo() As CompanyTradingInfo
            Get
                Return mTradingInfo
            End Get
        End Property

        Friend Sub New(ByVal name As String, ByVal id As String, ByVal data As String, ByVal vm As CompanyValuationMeasures, ByVal fh As CompanyFinancialHighlights, ByVal ti As CompanyTradingInfo)
            mName = name
            mID = id
            mData = data
            mValuationMeasures = vm
            mFinancialHighlights = fh
            mTradingInfo = ti
        End Sub

    End Class

    Public Class CompanyValuationMeasures
        Private mEnterpriseValueInMillion, mMarketCapitalisationInMillion, mTrailingPE, mForwardPE, mPEGRatio, mPriceSale, mPriceBook, mEnterpriseValueToRevenue, mEnterpriseValueToEBITDA As Double

        ''' <summary>
        ''' The total dollar value of all outstanding shares. Computed as shares times current market price. Capitalization is a measure of corporate size.
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks>Formula: Current Market Price Per Share x Number of Shares Outstanding</remarks>
        Public ReadOnly Property MarketCapitalisationInMillion() As Double
            Get
                Return mMarketCapitalisationInMillion
            End Get
        End Property
        ''' <summary>
        ''' Enterprise Value is a measure of theoretical takeover price, and is useful in comparisons against income statement line items above the interest expense/income lines such as revenue and EBITDA.
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks>Formula: Market Cap + Total Debt - Total Cash &amp; Short Term Investments</remarks>
        Public ReadOnly Property EnterpriseValueInMillion() As Double
            Get
                Return mEnterpriseValueInMillion
            End Get
        End Property
        ''' <summary>
        ''' A popular valuation ratio calculated by dividing the current market price by trailing 12-month (ttm) Earnings Per Share.
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks>Formula: Current Market Price / Earnings Per Share</remarks>
        Public ReadOnly Property TrailingPE() As Double
            Get
                Return mTrailingPE
            End Get
        End Property
        ''' <summary>
        ''' A valuation ratio calculated by dividing the current market price by projected 12-month Earnings Per Share.
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks>Formula: Current Market Price / Projected Earnings Per Share</remarks>
        Public ReadOnly Property ForwardPE() As Double
            Get
                Return mForwardPE
            End Get
        End Property
        ''' <summary>
        ''' Forward-looking measure rather than typical earnings growth measures, which look back in time (historical). Used to measure a stock's valuation against its projected 5-yr growth rate.
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks>Formula: P/E Ratio / 5-Yr Expected EPS Growth</remarks>
        Public ReadOnly Property PEGRatio() As Double
            Get
                Return mPEGRatio
            End Get
        End Property
        ''' <summary>
        ''' A valuation ratio calculated by dividing the current market price by trailing 12-month (ttm) Total Revenues. Often used to value unprofitable companies.
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks>Formula: Current Market Price / Total Revenues Per Share</remarks>
        Public ReadOnly Property PriceToSales() As Double
            Get
                Return mPriceSale
            End Get
        End Property
        ''' <summary>
        ''' A valuation ratio calculated by dividing the current market price by the most recent quarter's (mrq) Book Value Per Share.
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks>Formula: Current Market Price / Book Value Per Share</remarks>
        Public ReadOnly Property PriceToBook() As Double
            Get
                Return mPriceBook
            End Get
        End Property
        ''' <summary>
        ''' Firm value compared against revenue. Provides a more rigorous comparison than the Price/Sales ratio by removing the effects of capitalization from both sides of the ratio. Since revenue is unaffected by the interest income/expense line item, the appropriate value comparison should also remove the effects of capitalization, as EV does.
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks>Formula: Enterprise Value / Total Revenues</remarks>
        Public ReadOnly Property EnterpriseValueToRevenue() As Double
            Get
                Return mEnterpriseValueToRevenue
            End Get
        End Property
        ''' <summary>
        ''' Firm value compared against EBITDA (Earnings before interest, taxes, depreciation, and amortization). See Enterprise Value/Revenue.
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks>Formula: Enterprise Value / EBITDA</remarks>
        Public ReadOnly Property EnterpriseValueToEBITDA() As Double
            Get
                Return mEnterpriseValueToEBITDA
            End Get
        End Property

        Friend Sub New(ByVal values() As Double)
            mMarketCapitalisationInMillion = values(0)
            mEnterpriseValueInMillion = values(1)
            mTrailingPE = values(2)
            mForwardPE = values(3)
            mPEGRatio = values(4)
            mPriceSale = values(5)
            mPriceBook = values(6)
            mEnterpriseValueToRevenue = values(7)
            mEnterpriseValueToEBITDA = values(8)
        End Sub

    End Class

    Public Class CompanyFinancialHighlights
        'Fiscal Year
        Private mFiscalYearEnds, mMostRecentQuarter As Date
        'Profitability and Management Effectiveness
        Private mProfitMarginPercent, mOperatingMarginPercent, mReturnOnAssetsPercent, mReturnOnEquityPercent As Double
        'Income Statement
        Private mRevenueInMillion, mGrossProfitInMillion, mEBITDAInMillion, mNetIncomeAvlToCommonInMillion As Double
        Private mRevenuePerShare, mQuarterlyRevenueGrowthPercent, mDilutedEPS, mQuaterlyEarningsGrowthPercent As Double
        'Balance Sheet and CashFlowStatement
        Private mTotalCashInMillion, mTotalDeptInMillion, mOperatingCashFlowInMillion, mLeveredFreeCashFlowInMillion As Double
        Private mTotalCashPerShare, mTotalDeptPerEquity, mCurrentRatio, mBookValuePerShare As Double

        'Fiscal Year
        ''' <summary>
        ''' The date of the end of the firm's accounting year.
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public ReadOnly Property FiscalYearEnds() As Date
            Get
                Return mFiscalYearEnds
            End Get
        End Property
        ''' <summary>
        ''' Date for the most recent quarter end for which data is available on the Key Statistics page. This period is often abbreviated as "MRQ."
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public ReadOnly Property MostRecentQuarter() As Date
            Get
                Return mMostRecentQuarter
            End Get
        End Property

        'Profitability and Management Effectiveness
        ''' <summary>
        ''' Also known as Return on Sales, this value is the Net Income After Taxes for the trailing 12 months divided by Total Revenue for the same period and is expressed as a percentage.
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks>Formula: (Net Income / Total Revenues) x 100</remarks>
        Public ReadOnly Property ProfitMarginPercent() As Double
            Get
                Return mProfitMarginPercent
            End Get
        End Property
        ''' <summary>
        ''' This item represents the difference between the Total Revenues and the Total Operating Costs divided by Total Revenues, and is expressed as a percentage. Total Operating Costs consist of: (a) Cost of Goods Sold (b) Total (c) Selling, General &amp; Administrative Expenses (d) Total R &amp; D Expenses (e) Depreciation &amp; Amortization and (f) Total Other Operating Expenses, Total. A ratio used to measure a company's operating efficiency.
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks>Formula: [(Total Revenues - Total Operating Costs) / (Total Revenues)] x 100</remarks>
        Public ReadOnly Property OperatingMarginPercent() As Double
            Get
                Return mOperatingMarginPercent
            End Get
        End Property
        ''' <summary>
        ''' This ratio shows percentage of Returns to Total Assets of the company. This is a useful measure in analyzing how well a company uses its assets to produce earnings.
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks>Formula: Earnings from Continuing Operations / Average Total Equity</remarks>
        Public ReadOnly Property ReturnOnAssetsPercent() As Double
            Get
                Return mReturnOnAssetsPercent
            End Get
        End Property
        ''' <summary>
        ''' This is a measure of the return on money provided by the firms' owners. This ratio represents Earnings from Continuing Operations divided by average Total Equity and is expressed as a percentage.
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks>Formula: [(Earnings from Continuing Operations) / Total Common Equity] x 100</remarks>
        Public ReadOnly Property ReturnOnEquityPercent() As Double
            Get
                Return mReturnOnEquityPercent
            End Get
        End Property

        'Income Statement
        ''' <summary>
        ''' The amount of money generated by a company's business activities. Also known as Sales.
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public ReadOnly Property RevenueInMillion() As Double
            Get
                Return mRevenueInMillion
            End Get
        End Property
        ''' <summary>
        ''' Revenue in relation to shares.
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks>Formula: Total Revenues / Weighted Average Shares Outstanding</remarks>
        Public ReadOnly Property RevenuePerShare() As Double
            Get
                Return mRevenuePerShare
            End Get
        End Property
        ''' <summary>
        ''' The growth of Quarterly Total Revenues from the same quarter a year ago.
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks>Formula: [(Qtrly Total Revenues x Qtrly Total Revenues (yr ago)) / Qtrly Total Revenues (yr ago)] x 100</remarks>
        Public ReadOnly Property QuarterlyRevenueGrowthPercent() As Double
            Get
                Return mQuarterlyRevenueGrowthPercent
            End Get
        End Property
        ''' <summary>
        ''' This item represents Total Revenues minus Cost Of Goods Sold, Total.
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public ReadOnly Property GrossProfitInMillion() As Double
            Get
                Return mGrossProfitInMillion
            End Get
        End Property
        ''' <summary>
        ''' The accounting acronym EBITDA stands for "Earnings Before Interest, Tax, Depreciation, and Amortization."
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public ReadOnly Property EBITDAInMillion() As Double
            Get
                Return mEBITDAInMillion
            End Get
        End Property
        ''' <summary>
        ''' This ratio shows percentage of Net Income to Common Excluding Extra Items less Earnings Of Discontinued Operations to Total Revenues. This is the dollar amount accruing to common shareholders for dividends and retained earnings.
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks>Formula: Net Income - Preferred Dividend and Other Adjustments - Earnings Of Discontinued Operations - Extraordinary Item &amp; Accounting Change</remarks>
        Public ReadOnly Property NetIncomeAvlToCommonInMillion() As Double
            Get
                Return mNetIncomeAvlToCommonInMillion
            End Get
        End Property
        ''' <summary>
        ''' This is the Adjusted Income Available to Common Stockholders (based on Generally Accepted Accounting Principles, GAAP) for the trailing 12 months divided by the trailing 12 month weighted average shares outstanding. Diluted EPS uses diluted weighted average shares in the calculation, or the weighted average shares assuming all convertible securities are exercised.
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks>Formula: (Net Income - Preferred Dividend and Other Adjustments)/ Weighted Average Diluted Shares Outstanding</remarks>
        Public ReadOnly Property DilutedEPS() As Double
            Get
                Return mDilutedEPS
            End Get
        End Property
        ''' <summary>
        ''' The growth of Quarterly Net Income from the same quarter a year ago.
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks>Formula: [(Qtrly Net Income x Qtrly Net Income (yr ago)) / Qtrly Net Income (yr ago)] x 100</remarks>
        Public ReadOnly Property QuaterlyEarningsGrowthPercent() As Double
            Get
                Return mQuaterlyEarningsGrowthPercent
            End Get
        End Property

        'Balance Sheet and CashFlowStatement
        ''' <summary>
        ''' The Total Cash and Short-term Investments on the balance sheet as of the most recent quarter.
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public ReadOnly Property TotalCashInMillion() As Double
            Get
                Return mTotalCashInMillion
            End Get
        End Property
        ''' <summary>
        ''' This is the Total Cash plus Short Term Investments divided by the Shares Outstanding at the end of the most recent fiscal quarter.
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public ReadOnly Property TotalCashPerShare() As Double
            Get
                Return mTotalCashPerShare
            End Get
        End Property
        ''' <summary>
        ''' The Total Debt on the balance sheet as of the most recent quarter.
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks>Formula: Short Term Borrowings + Current Portion of Long Term Debt + Current Portion of Capital Lease + Long Term Debt + Long Term Capital Lease + Finance Division Debt Current + Finance Division Debt Non Current</remarks>
        Public ReadOnly Property TotalDeptInMillion() As Double
            Get
                Return mTotalDeptInMillion
            End Get
        End Property
        ''' <summary>
        ''' This ratio is Total Debt for the most recent fiscal quarter divided by Total Shareholder Equity for the same period.
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks>Formula: [(Long-term Debt + Capital Leases + Finance Division Debt Non-Current + Short-term Borrowings + Current Portion of Long-term Debt + Current Portion of Capital Lease Obligation + Finance Division Debt Current) / (Total Common Equity + Total Preferred Equity)] x 100</remarks>
        Public ReadOnly Property TotalDeptPerEquity() As Double
            Get
                Return mTotalDeptPerEquity
            End Get
        End Property
        ''' <summary>
        ''' This is the ratio of Total Current Assets for the most recent quarter divided by Total Current Liabilities for the same period.
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks>Formula: Total Current Assets / Total Current Liabilities</remarks>
        Public ReadOnly Property CurrentRatio() As Double
            Get
                Return mCurrentRatio
            End Get
        End Property
        ''' <summary>
        ''' This is defined as the Common Shareholder's Equity divided by the Shares Outstanding at the end of the most recent fiscal quarter.
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks>Formula: Total Common Equity / Total Common Shares Outstanding</remarks>
        Public ReadOnly Property BookValuePerShare() As Double
            Get
                Return mBookValuePerShare
            End Get
        End Property
        ''' <summary>
        ''' Net cash used or generated in operating activities during the stated period of time. It reflects net impact of all operating activity transactions on the cash flow of the entity. This GAAP figure is taken directly from the company's Cash Flow Statement and might include significant non-recurring items.
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks>Formula: Net Income + Depreciation and Amortization, Total + Other Amortization + Other Non-Cash Items, Total + Change in Working Capital</remarks>
        Public ReadOnly Property OperatingCashFlowInMillion() As Double
            Get
                Return mOperatingCashFlowInMillion
            End Get
        End Property
        ''' <summary>
        ''' This figure is a normalized item that excludes non-recurring items and also takes into consideration cash inflows from financing activities such as debt or preferred stock issuances.
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks>Formula: (EBIT + Interest Expense) x (1 x Tax Rate) + Depreciation &amp; Amort., Total + Other Amortization + Capital Expenditure + Sale (Purchase) of Intangible assets - Change in Net Working Capital + Pref. Dividends Paid + Total Debt Repaid + Total Debt Issued + Repurchase of Preferred + Issuance of Preferred Stock   -- [Where: Tax Rate = 0.375]</remarks>
        Public ReadOnly Property LeveredFreeCashFlowInMillion() As Double
            Get
                Return mLeveredFreeCashFlowInMillion
            End Get
        End Property

        Friend Sub New(ByVal fiscalYEnds As Date, ByVal mostRecentQtr As Date, ByVal values() As Double)

            mFiscalYearEnds = fiscalYEnds
            mMostRecentQuarter = mostRecentQtr

            mProfitMarginPercent = values(0)
            mOperatingMarginPercent = values(1)

            mReturnOnAssetsPercent = values(2)
            mReturnOnEquityPercent = values(3)

            mRevenueInMillion = values(4)
            mRevenuePerShare = values(5)
            mQuarterlyRevenueGrowthPercent = values(6)
            mGrossProfitInMillion = values(7)
            mEBITDAInMillion = values(8)
            mNetIncomeAvlToCommonInMillion = values(9)
            mDilutedEPS = values(10)
            mQuaterlyEarningsGrowthPercent = values(11)

            mTotalCashInMillion = values(12)
            mTotalCashPerShare = values(13)
            mTotalDeptInMillion = values(14)
            mTotalDeptPerEquity = values(15)
            mCurrentRatio = values(16)
            mBookValuePerShare = values(17)

            mOperatingCashFlowInMillion = values(18)
            mLeveredFreeCashFlowInMillion = values(19)
        End Sub

    End Class

    Public Class CompanyTradingInfo
        'StockPriceHistory
        Private mBeta, mOneYearChangePercent, mSP500OneYearChangePercent, mOneYearHigh, mOneYearLow, mFiftyDayMovingAverage, mTwoHundredDayMovingAverage As Double
        'Share Statistics
        Private mAverageVolumeThreeMonthInThousand, mAverageVolumeTenDaysInThousand, mSharesOutstandingInMillion, mFloatInMillion, mSharesShortInMillion, mSharesShortPriorMonthInMillion As Double
        Private mPercentHeldByInsiders, mPercentHeldByInstitutions, mShortRatio, mShortPercentOfFloat As Double
        'Dividends and Splits
        Private mForwardAnnualDividendRate, mForwardAnnualDividendYieldPercent, mTrailingAnnualDividendYield, mTrailingAnnualDividendYieldPercent, mFiveYearAverageDividendYieldPercent, mPayoutRatio As Double
        Private mDividendDate, mExDividendDate, mLastSplitDate As Date
        Private mLastSplitFactor As SharesSplitFactor

        'StockPriceHistory
        ''' <summary>
        ''' The Beta used is Beta of Equity. Beta is the monthly price change of a particular company relative to the monthly price change of the S&amp;P500. The time period for Beta is 3 years (36 months) when available.
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public ReadOnly Property Beta() As Double
            Get
                Return mBeta
            End Get
        End Property
        ''' <summary>
        ''' The percentage change in price from 52 weeks ago.
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public ReadOnly Property OneYearChangePercent() As Double
            Get
                Return mOneYearChangePercent
            End Get
        End Property
        ''' <summary>
        ''' The S&amp;P 500 Index's percentage change in price from 52 weeks ago.
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public ReadOnly Property SP500OneYearChangePercent() As Double
            Get
                Return mSP500OneYearChangePercent
            End Get
        End Property
        ''' <summary>
        ''' This price is the highest Price the stock traded at in the last 12 months. This could be an intraday high.
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public ReadOnly Property OneYearHigh() As Double
            Get
                Return mOneYearHigh
            End Get
        End Property
        ''' <summary>
        ''' This price is the lowest Price the stock traded at in the last 12 months. This could be an intraday low.
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public ReadOnly Property OneYearLow() As Double
            Get
                Return mOneYearLow
            End Get
        End Property
        ''' <summary>
        ''' A simple moving average that is calculated by dividing the sum of the closing prices in the last 50 trading days by 50.
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public ReadOnly Property FiftyDayMovingAverage() As Double
            Get
                Return mFiftyDayMovingAverage
            End Get
        End Property
        ''' <summary>
        ''' A simple moving average that is calculated by dividing the sum of the closing prices in the last 200 trading days by 200.
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public ReadOnly Property TwoHundredDayMovingAverage() As Double
            Get
                Return mTwoHundredDayMovingAverage
            End Get
        End Property

        'Share Statistics
        ''' <summary>
        ''' This is the average daily trading volume during the last 3 months.
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public ReadOnly Property AverageVolumeThreeMonthInThousand() As Double
            Get
                Return mAverageVolumeThreeMonthInThousand
            End Get
        End Property
        ''' <summary>
        ''' This is the average daily trading volume during the last 10 days.
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public ReadOnly Property AverageVolumeTenDaysInThousand() As Double
            Get
                Return mAverageVolumeTenDaysInThousand
            End Get
        End Property
        ''' <summary>
        ''' This is the number of shares of common stock currently outstanding—the number of shares issued minus the shares held in treasury. This field reflects all offerings and acquisitions for stock made after the end of the previous fiscal period.
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public ReadOnly Property SharesOutstandingInMillion() As Double
            Get
                Return mSharesOutstandingInMillion
            End Get
        End Property
        ''' <summary>
        ''' This is the number of freely traded shares in the hands of the public. Float is calculated as Shares Outstanding minus Shares Owned by Insiders, 5% Owners, and Rule 144 Shares.
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public ReadOnly Property FloatInMillion() As Double
            Get
                Return mFloatInMillion
            End Get
        End Property
        ''' <summary>
        ''' This is the number of shares currently borrowed by investors for sale, but not yet returned to the owner (lender).
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public ReadOnly Property SharesShortInMillion() As Double
            Get
                Return mSharesShortInMillion
            End Get
        End Property
        ''' <summary>
        ''' Shares Short in the prior month. See Shares Short.
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public ReadOnly Property SharesShortPriorMonthInMillion() As Double
            Get
                Return mSharesShortPriorMonthInMillion
            End Get
        End Property
        Public ReadOnly Property PercentHeldByInsiders() As Double
            Get
                Return mPercentHeldByInsiders
            End Get
        End Property
        Public ReadOnly Property PercentHeldByInstitutions() As Double
            Get
                Return mPercentHeldByInstitutions
            End Get
        End Property
        ''' <summary>
        ''' This represents the number of days it would take to cover the Short Interest if trading continued at the average daily volume for the month. It is calculated as the Short Interest for the Current Month divided by the Average Daily Volume.
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public ReadOnly Property ShortRatio() As Double
            Get
                Return mShortRatio
            End Get
        End Property
        ''' <summary>
        ''' Number of shares short divided by float.
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public ReadOnly Property ShortPercentOfFloat() As Double
            Get
                Return mShortPercentOfFloat
            End Get
        End Property

        'Dividends and Splits
        ''' <summary>
        ''' The annualized amount of dividends expected to be paid in the current fiscal year.
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public ReadOnly Property ForwardAnnualDividendRate() As Double
            Get
                Return mForwardAnnualDividendRate
            End Get
        End Property
        ''' <summary>
        ''' Formula: (Forward Annual Dividend Rate / Current Market Price) x 100
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public ReadOnly Property ForwardAnnualDividendYieldPercent() As Double
            Get
                Return mForwardAnnualDividendYieldPercent
            End Get
        End Property
        ''' <summary>
        ''' The sum of all dividends paid out in the trailing 12-month period.
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public ReadOnly Property TrailingAnnualDividendYield() As Double
            Get
                Return mTrailingAnnualDividendYield
            End Get
        End Property
        ''' <summary>
        ''' Formula: (Trailing Annual Dividend Rate / Current Market Price) x 100
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public ReadOnly Property TrailingAnnualDividendYieldPercent() As Double
            Get
                Return mTrailingAnnualDividendYieldPercent
            End Get
        End Property
        ''' <summary>
        ''' The average Forward Annual Dividend Yield in the past 5 years.
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public ReadOnly Property FiveYearAverageDividendYieldPercent() As Double
            Get
                Return mFiveYearAverageDividendYieldPercent
            End Get
        End Property
        ''' <summary>
        ''' The ratio of Earnings paid out in Dividends, expressed as a percentage.
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public ReadOnly Property PayoutRatio() As Double
            Get
                Return mPayoutRatio
            End Get
        End Property
        ''' <summary>
        ''' The payment date for a declared dividend.
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public ReadOnly Property DividendDate() As Date
            Get
                Return mDividendDate
            End Get
        End Property
        ''' <summary>
        ''' The first day of trading when the seller, rather than the buyer, of a stock is entitled to the most recently announced dividend payment. The date set by the NYSE (and generally followed on other U.S. exchanges) is currently two business days before the record date. A stock that has gone ex-dividend is denoted by an x in newspaper listings on that date.
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public ReadOnly Property ExDividendDate() As Date
            Get
                Return mExDividendDate
            End Get
        End Property
        Public ReadOnly Property LastSplitDate() As Date
            Get
                Return mLastSplitDate
            End Get
        End Property
        Public ReadOnly Property LastSplitFactor() As SharesSplitFactor
            Get
                Return mLastSplitFactor
            End Get
        End Property

        Friend Sub New(ByVal values() As Double, ByVal dividendDate As Date, ByVal exDividendDate As Date, ByVal lastSplitDate As Date, ByVal lastSplitFactor As SharesSplitFactor)

            mBeta = values(0)
            mOneYearChangePercent = values(1)
            mSP500OneYearChangePercent = values(2)
            mOneYearHigh = values(3)
            mOneYearLow = values(4)
            mFiftyDayMovingAverage = values(5)
            mTwoHundredDayMovingAverage = values(6)

            mAverageVolumeThreeMonthInThousand = values(7)
            mAverageVolumeTenDaysInThousand = values(8)
            mSharesOutstandingInMillion = values(9)
            mFloatInMillion = values(10)
            mPercentHeldByInsiders = values(11)
            mPercentHeldByInstitutions = values(12)
            mSharesShortInMillion = values(13)
            mShortRatio = values(14)
            mShortPercentOfFloat = values(15)
            mSharesShortPriorMonthInMillion = values(16)

            mForwardAnnualDividendRate = values(17)
            mForwardAnnualDividendYieldPercent = values(18)
            mTrailingAnnualDividendYield = values(19)
            mTrailingAnnualDividendYieldPercent = values(20)
            mFiveYearAverageDividendYieldPercent = values(21)
            mPayoutRatio = values(22)
            mDividendDate = dividendDate
            mExDividendDate = exDividendDate
            mLastSplitFactor = lastSplitFactor
            mLastSplitDate = lastSplitDate
        End Sub

    End Class

    ''' <summary>
    ''' Provides properties for a stock split relation.
    ''' </summary>
    ''' <remarks></remarks>
    Public Class SharesSplitFactor
        Private mFromOld, mToNew As Integer

        ''' <summary>
        ''' Old relational value.
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public ReadOnly Property FromOld() As Integer
            Get
                Return mFromOld
            End Get
        End Property
        ''' <summary>
        ''' New relational value.
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public ReadOnly Property ToNew() As Integer
            Get
                Return mToNew
            End Get
        End Property

        ''' <summary>
        ''' Default constructor
        ''' </summary>
        ''' <param name="f"></param>
        ''' <param name="t"></param>
        ''' <remarks></remarks>
        Public Sub New(ByVal f As Integer, ByVal t As Integer)
            mFromOld = f
            mToNew = t
        End Sub

        Public Overrides Function ToString() As String
            Return String.Format("{0} : {1}", mFromOld, mToNew)
        End Function

    End Class

End Namespace
